package com.cius.ssm.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 全局异常处理器
 * Created by ciuscheung on 17/4/10.
 */
public class CustomExceptionResolver implements HandlerExceptionResolver{
    /**
     *
     * @param httpServletRequest
     * @param httpServletResponse
     * @param o
     * @param ex 系统抛出的异常
     * @return
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        //handler就是处理器适配器要执行的handler对象,(只有method)

        //解析异常类型
//        String message = null;
//            //如果该异常类型是系统自定义的异常,直接取出异常信息,在错误页面显示
//        if(ex instanceof CustomException){
//            message = ex.getMessage();
//        }else
//        {
//            //如果该异常不是系统自定义异常,构造一个自定义异常类型(信息为"位置错误")
//            message = "未知错误";
//        }

        //上面代码可变为
        //解析异常类型
        CustomException customException = null;
        //如果该异常类型是系统自定义的异常,直接取出异常信息,在错误页面显示
        if (ex instanceof CustomException){
            customException = (CustomException) ex;
        } else{
            //如果该异常不是系统自定义异常,构造一个自定义异常类型(信息为"位置错误")
            customException = new CustomException("未知错误");
        }
        //错误信息
        String message = customException.getMessage();
        ModelAndView modelAndView = new ModelAndView();
        //将错误信息传到页面
        modelAndView.addObject("message",message);
        //指定错误页面
        modelAndView.setViewName("error");
        return modelAndView;
    }
}
